package com.lty.jeeg.server.modules.tms.service;

import com.lty.jeeg.server.common.page.table.PageTableRequest;
import com.lty.jeeg.server.common.page.table.PageTableResponse;
import com.lty.jeeg.server.modules.tms.model.Task;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * @author : LTY
 * @date : 2019-03-26 10:53:09
 * Description :
 */
public interface TaskService {

    /**
     * 根据ID获取
     *
     * @param id ID
     * @return bean
     */
    Task getById(Long id);

    /**
     * 根据projectId获取
     *
     * @param projectId projectId
     * @return bean
     */
    List<Task> getByProjectId(Long projectId);

    /**
     * 删除
     *
     * @param id ID
     * @return 1/0
     */
    int delete(Long id);

    /**
     * 修改
     *
     * @param task bean
     * @return 1/0
     */
    int update(Task task);


    /**
     * 修改任务状态
     *
     * @param id   任务ID
     * @param type 任务状态
     * @return
     */
    int changeStatus(Long id, Integer type);
    /**
     * 修改任务优先级
     *
     * @param id   任务ID
     * @param grade 任务优先级
     * @return
     */
    int changeGrade(Long id, Integer grade);

    /**
     * 修改负责人
     * @param id
     * @param participantId
     * @return
     */
    int changeParticipant(Long id, String participantId);

    /**
     * 修改执行者
     * @param id
     * @param executorId
     * @return
     */
    int changeExecutor(Long id, Long executorId);

    /**
     * 修改登记工时
     * @param id
     * @param actualTotalWorkingHours
     * @return
     */
    int changeActualTotalWorkingHours(Long id, Integer actualTotalWorkingHours);

    /**
     * 修改预计工时
     * @param id
     * @param estimateWorkingHours
     * @return
     */
    int changeEstimateWorkingHours(Long id, Integer estimateWorkingHours);

    /**
     * 修改截止日期
     * @param id
     * @param deadline
     * @return
     */
    int changeDeadline(Long id, Date deadline);

    /**
     * 修改关联任务
     * @param id
     * @param conjunctionTaskId
     * @return
     */
    int changeConjunctionTask(Long id, String conjunctionTaskId,String conjunctionTaskName);
    /**
     * 保存
     *
     * @param task bean
     * @return ID
     */
    Long save(Task task);

    /**
     * 列表
     *
     * @param request ID
     * @return 分页
     */
    PageTableResponse list(PageTableRequest request);

    /**
     * 更改任务置顶
     * @param taskId 任务ID
     * @param isTop 1/0 是否置顶
     * @return
     */
    Integer updateIsTop(Long taskId, Integer isTop);

    void timing();
}
